package com.frejoys.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.SetAgentDto;
import com.frejoys.common.dto.admin.StoreIdAndPageDto;
import com.frejoys.common.dto.admin.StoreIdAndPhoneDto;
import com.frejoys.common.dto.app.AgentStoreIdDto;
import com.frejoys.common.dto.common.PageDto;
import com.frejoys.common.vo.admin.AdminAgentStoreListVo;
import com.frejoys.common.vo.admin.AdminAgentStoreVo;
import com.frejoys.common.vo.admin.StoreAndeAgentAndUserListVo;
import com.frejoys.common.vo.agent.AgentStoreVo;
import com.frejoys.common.vo.app.AgentStoreInfoVo;
import com.frejoys.common.vo.app.AgentStoreListVo;
import com.frejoys.dao.entity.AgentStore;

import java.util.List;

public interface AgentStoreService extends IService<AgentStore> {

    default AgentStore getOnly(QueryWrapper<AgentStore> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default AgentStore getOnly(LambdaQueryWrapper<AgentStore> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    /**
     * 添加信息
     *
     * @param agentUserId 代理用户id
     * @param userId      商家用户id
     * @param storeId     店铺id
     * @return
     */
    boolean addInfo(Long agentUserId, Long userId, Integer storeId);

    boolean delInfo(Integer storeId);

    /**
     * 根据店铺id获取店铺代理人
     *
     * @param storeId
     * @return
     */
    Long getAgentUserIdByStoreId(Integer storeId);

    /**
     * 根据代理人id获取代理店铺列表
     */
    List<AgentStoreListVo> listAgentStoreByUserId(PageDto dto, Long userId);

    /**
     * 后台获取代理店铺列表
     *
     * @return
     */
    List<AdminAgentStoreListVo> listAgentStore();

    /**
     * 后台获取代理店铺详情
     * @param storeId 店铺id
     */
    AdminAgentStoreVo getStoreInfo(Integer storeId);


    /** 修改代理人
     *
     * @param dto
     * @return
     */
    Integer setAgent(SetAgentDto dto);


    /** 获取代理店铺详情
     *
     * @param id  代理服务商家id
     * @return
     */
    AgentStoreInfoVo agentStoreInfo(Integer id);


    //获取店铺信息及代理人信息及拥有者信息
    IPage<StoreAndeAgentAndUserListVo> storeAndeAgentAndUserListInfo(StoreIdAndPhoneDto dto);
}
